package com.project.dev.ouestpaul;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.graphics.Typeface;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.project.database.ouestpaul.Database;
import com.project.lieux.ouestpaul.CoordGPS;
import com.project.lieux.ouestpaul.Lieu;
import com.project.lieux.ouestpaul.Lieux;

public class RechercheActivity extends Activity implements OnItemClickListener, OnItemLongClickListener {

	private ListView listResultats;
	private EditText editRecherche;
	HashMap<String, String> hashMapResultats;
	private Lieux listeLieux;
	private String saisieRecherche;
	ArrayLigneAdapter adaptater;
	private final static int ID_FAVORIS_DIALOG = 0;
	Dialog box = null;

	public void addCharDansLeChampDeRecherche(char c) {
		editRecherche.setText(c);
	}

	protected void onCreate(final Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_recherche);
		//listeLieux = new Lieux();

		Database d = new Database(getApplicationContext());
		listeLieux = d.getLieux();

		hashMapResultats = new HashMap<String, String>();
		editRecherche = (EditText) findViewById(R.id.ChampRecherche);
		Typeface font = Typeface.createFromAsset(getAssets(),
				"Strato-linked.ttf");
		TextView tv = (TextView) findViewById(R.id.textView1);
		tv.setTypeface(font);

		editRecherche.addTextChangedListener(new TextWatcher() {
			@Override
			public void onTextChanged(final CharSequence s,
					final int start, final int before,
					final int count) {
				if (editRecherche.getText().toString().equals("")) {
					adaptater.notifyDataSetChanged();
				} else {
					saisieRecherche =
						editRecherche.getText().toString();
					lancerRecherche(saisieRecherche);
					adaptater.notifyDataSetChanged();
				}
			}

			@Override
			public void afterTextChanged(final Editable s) {
				adaptater.notifyDataSetChanged();
			}

			@Override
			public void beforeTextChanged(final CharSequence s,
					final int start, final int count,
					final int after) {

			}
		});

		this.listResultats = (ListView) findViewById(R.id.listViewResultats);
		listResultats.setOnItemClickListener(this);
		listResultats.setOnItemLongClickListener(this);

	}

	public final boolean onCreateOptionsMenu(final Menu menu) {
		getMenuInflater().inflate(R.menu.recherche2, menu);
		return true;
	}

	// fonction de recherche
	public final void lancerRecherche(final String nomRechercher) {
		Ligne mapResultat = new Ligne();
		ArrayList<Ligne> listTempItemRes = new ArrayList<Ligne>();
		Lieux lieuxFiltre = listeLieux.find(nomRechercher);

		for (Lieu lieu : lieuxFiltre.getLieux()) {
			mapResultat.setName(lieu.getNom());
			//Toast.makeText(this, lieu.isFavorite().toString(), Toast.LENGTH_LONG);
			if(lieu.isFavorite()){
				mapResultat.setImg(R.drawable.ic_star_fav);
			}
			else
			{
				mapResultat.setImg(R.drawable.ic_star);
			}
			mapResultat.setDesc(lieu.getType().toString());
			listTempItemRes.add(mapResultat);
			mapResultat = new Ligne();
		}
		adaptater = new ArrayLigneAdapter(
				this.getBaseContext(), listTempItemRes,
				R.layout.affichageitem,
				new String[] {"titre", "desc", "img" }, new int[] {
						R.id.titre, R.id.desc, R.id.img });
		listResultats.setAdapter(adaptater);
	}

	
	public final void onItemClick(final AdapterView<?> parent, final View v,
			final int position, final long id) {
		Object c = parent.getAdapter().getItem(position);
		CoordGPS coord = null;
		Lieux lieuxtemp = listeLieux.find(((Ligne) c).getName());	
		coord = ((LinkedList<Lieu>) lieuxtemp.getLieux())
				.getFirst().getCoordonnee();
		
		Bundle coordbunble = new Bundle();
		coordbunble.putDouble("X", coord.getX());
		coordbunble.putDouble("Y", coord.getY());
		Bundle titrebundle = new Bundle();
		titrebundle.putString("titre", ((Ligne) c).getName());
		
		Intent intent = new Intent(this, ItineraireActivity.class);
		intent.putExtras(coordbunble);
		intent.putExtras(titrebundle);
		LocationManager service = (LocationManager)
				getSystemService(LOCATION_SERVICE);
		Boolean enabledGPS = service
				.isProviderEnabled(LocationManager.GPS_PROVIDER);
		if (!enabledGPS) {
			Toast.makeText(this, "GPS signal not found", Toast.LENGTH_LONG)
					.show(); }
		else {
			startActivity(intent);
		}
		
	}

	@SuppressWarnings("deprecation")
	public final boolean onItemLongClick(final AdapterView<?> parent, final View arg1,
			final int position, final long arg3) {
		
		Object c = parent.getAdapter().getItem(position);
		ImageView i = (ImageView) findViewById(((Ligne) c).getImg());
		Lieu l = listeLieux.find(((Ligne) c).getName()).getLieux().get(0);
    		if (!l.isFavorite()) {
				l.setFavorite(true);
			}
    		else{
    			l.setFavorite(false);
    	}
    		lancerRecherche(saisieRecherche);
		showDialog(ID_FAVORIS_DIALOG);
        return true;
	}

	@Override
	  public Dialog onCreateDialog (int id) {
	      box = new Dialog(this);
	      box.setTitle("Ajout en favoris !");
	    return box;
	  }

	
}



